﻿using System;
using System.Linq;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmProdutos : Form
    {
        #region -- Membros e Construtores -------------------------------------------------------------------------------------------------
        public FrmProdutos()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
        }

        private void FrmProdutos_Load(object sender, EventArgs e)
        {
            Contexto.MainForm.Cursor = Cursors.Arrow;

            cmdCopiarPreco.Enabled = cmdEditar.Enabled = cmdExcluir.Enabled = false;

            if (Contexto.Db.tbGrupoProdutoes.Count() > 0)
            {
                cmbGrupoProduto.ValueMember = "idGrupo";
                cmbGrupoProduto.DisplayMember = "desNomeGrupo";
                cmbGrupoProduto.DataSource = Contexto.Db.tbGrupoProdutoes;

                AtualizarGrid();
            }
            else
            {
                Contexto.MainForm.ExibirMensagem(
                       "Não existem grupos de produtos cadastrados. Por favor cadastre um grupo de produto para continuar.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                BeginInvoke(new MethodInvoker(Close));
            }

        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Eventos ----------------------------------------------------------------------------------------------------------------
        private void cmdAdicionar_Click(object sender, EventArgs e)
        {
            var frm = new FrmProduto()
            {
                Pai = this
            };
            frm.ShowDialog();
        }

        private void cmdExcluir_Click(object sender, EventArgs e)
        {
            var res = Contexto.MainForm.ExibirMensagem("Deseja excluir o produto selecionado?",
                                                       MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (res == DialogResult.No)
                return;

            var pd = ((tbProduto)gvProdutos.SelectedRows[0].DataBoundItem);

            //if (Contexto.Db.tbProdutoes.Where(p => p.idGrupo == gp.idGrupo).Count() > 0)
            //{
            //    Contexto.MainForm.ExibirMensagem("Não é possível excluir este produto, pois esta sendo utilizado.",
            //                                              MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    return;
            //}

            Contexto.Db.tbProdutoes.DeleteObject(pd);

            Contexto.Db.SaveChanges();

            AtualizarGrid();
        }

        private void cmdEditar_Click(object sender, EventArgs e)
        {
            var frm = new FrmProduto()
            {
                Produto = (tbProduto)gvProdutos.SelectedRows[0].DataBoundItem,
                Edicao = true,
                Pai = this
            };

            frm.ShowDialog();
        }

        private void cmdAtualizar_Click(object sender, EventArgs e)
        {
            AtualizarGrid();
        }

        private void cmdSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cmbGrupoProduto_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarGrid();
        }

        private void gvProdutos_DoubleClick(object sender, EventArgs e)
        {
            if (gvProdutos.SelectedRows.Count != 1)
                return;

            var frm = new FrmProduto()
            {
                Produto = (tbProduto)gvProdutos.SelectedRows[0].DataBoundItem,
                Edicao = true,
                Pai = this
            };

            frm.ShowDialog();
        }

        private void gvProdutos_SelectionChanged(object sender, EventArgs e)
        {
            if (gvProdutos.SelectedRows.Count == 0)
                cmdCopiarPreco.Enabled = cmdEditar.Enabled = cmdExcluir.Enabled = false;
            else if (gvProdutos.SelectedRows.Count == 1)
            {
                cmdEditar.Enabled = cmdExcluir.Enabled = true;

                var gp = (tbGrupoProduto)cmbGrupoProduto.SelectedItem;

                var qtdProds = Contexto.Db.tbProdutoes.Where(p => p.idGrupo ==
                        gp.idGrupo).Count();

                cmdCopiarPreco.Enabled = qtdProds != 0;
            }
            else
            {
                cmdCopiarPreco.Enabled = cmdEditar.Enabled = false;
                cmdExcluir.Enabled = true;
            }
        }

        private void cmdCopiarPreco_Click(object sender, EventArgs e)
        {
            var res = Contexto.MainForm.ExibirMensagem("Deseja aplicar o preço do grupo de produto selecionado a todos produtos deste grupo?",
                                                       MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (res == DialogResult.No)
                return;

            var gp = (tbGrupoProduto)cmbGrupoProduto.SelectedItem;

            Contexto.Db.tbProdutoes.Where(p => p.idGrupo == gp.idGrupo)
                .ToList().ForEach(p =>
                {
                    p.valPrecoProduto = 0;
                });

            Contexto.Db.SaveChanges();

            AtualizarGrid();
        }

        private void cmdPrecoCliente_Click(object sender, EventArgs e)
        {
            Contexto.MainForm.Cursor = Cursors.WaitCursor;

            Contexto.MainForm.AbrirFormMdi<FrmProdutosCliente>();
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Metodos ----------------------------------------------------------------------------------------------------------------
        public void AtualizarGrid()
        {
            Cursor = Cursors.WaitCursor;

            var cl = Contexto.Db.tbClientes.Count();
            var lp = Contexto.Db.tbProdutoes.ToList();

            cmdPrecoCliente.Enabled = cl != 0 && lp.Count() != 0;

            gvProdutos.DataSource = Contexto.Db.tbProdutoes.ToList().Where(p => p.idGrupo == cmbGrupoProduto.SelectedValue.ParaInt());

            Cursor = Cursors.Arrow;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------
    }
}
